home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / cimb.arj / XMS.ASM < prev    next >
Encoding:
Assembly Source File  |  1994-08-31  |  4.5 KB  |  249 lines

  1. ;===============================================================================
  2. ;
  3. ;FICHERO: XMS.ASM
  4. ;
  5. ;AUTOR: ANTONIO LADESA JURADO
  6. ;
  7. ;FECHA: 24/6/94
  8. ;
  9. ;DESCRIPCION:
  10. ;
  11. ;    Fichero que contiene las estructuras, constantes, variables y funciones
  12. ;    internas y externas para la gestión de memoria XMS.
  13. ;
  14. ;===============================================================================
  15.  
  16.  
  17. ;  Desplazamiento para llamadas FAR 
  18. _AOFF    EQU    6
  19.  
  20. ;  Segmento de datos 
  21. SEGDATOS    MACRO
  22.     PUSH AX
  23.     MOV AX,_DATA
  24.     MOV DS,AX
  25.     POP AX
  26.     ENDM
  27.  
  28. XMEM_TEXT    SEGMENT BYTE PUBLIC 'CODE'
  29.         ASSUME CS:XMEM_TEXT,DS:_DATA
  30.  
  31. ;---- CODIFICACION DE LAS FUNCIONES OFRECIDAS ----------------------------------
  32.  
  33.  
  34. ;---- FUNCION: extern int XMSmemIniciar(void) ----------------------------------
  35. ;
  36. ;    Descripción:
  37. ;
  38. ;   Detecta la presencia del driver de memoria extendida.
  39. ;
  40. ;    Retorno:
  41. ;
  42. ;        - Número de la versión
  43. ;        - 0 si no está instalado
  44. ;
  45. ;---- CODIGO: ------------------------------------------------------------------
  46.  
  47.         PUBLIC _XMSmemIniciar
  48. _XMSmemIniciar    PROC FAR
  49.         PUSH BP
  50.         MOV BP,SP
  51.  
  52. ;     llamada al driver 
  53.         MOV AX,4300H
  54.         INT 2FH
  55.         CMP AL,80H
  56.         JE INI1
  57.  
  58. ;     si el driver no esta presente devuelve -1
  59.         MOV AX,0FFFFH
  60.         JMP INI2
  61.  
  62. ;     si el driver esta presente...
  63. INI1:        MOV AX,4310H
  64.         INT 2FH
  65.         MOV WORD PTR CS:[_CONTOFF],BX
  66.         MOV WORD PTR CS:[_CONTSEG],ES
  67.  
  68. ;     devuelve la version
  69.         XOR AX,AX
  70.         CALL CS:[CONTROL]
  71.  
  72. ;     retorno
  73. INI2:        SEGDATOS
  74.         POP BP
  75.         RET
  76. _XMSmemIniciar    ENDP
  77.  
  78. ;---- FIN FUNCION --------------------------------------------------------------
  79.  
  80. ;---- FUNCION: extern int XMSmemMover(XMSBloque *p) ----------------------------
  81. ;
  82. ;    Descripción:
  83. ;
  84. ;  Mueve un bloque de memoria XMS
  85. ;
  86. ; Parámetros:
  87. ;
  88. ;   XMSBloque *p: puntero al bloque.
  89. ;
  90. ;    Retorno:
  91. ;
  92. ;        - 1 si mueve el bloque.
  93. ;        - 0 si no
  94. ;
  95. ;---- CODIGO: ------------------------------------------------------------------
  96.  
  97.         PUBLIC _XMSmemMover
  98. _XMSmemMover    PROC FAR
  99.         PUSH BP
  100.         MOV BP,SP
  101.  
  102. ;    Direccion de la estructura
  103.         MOV SI,[BP+_AOFF+0]
  104.         MOV DS,[BP+_AOFF+2]
  105.  
  106. ;    Mover
  107.         MOV AH,11
  108.         CALL CS:[CONTROL]
  109.  
  110. ;    Retorno
  111.         SEGDATOS
  112.         POP BP
  113.         RET
  114. _XMSmemMover    ENDP
  115.  
  116. ;---- FIN FUNCION --------------------------------------------------------------
  117.  
  118. ;---- FUNCION: extern int XMSmemLiberar(int h) ---------------------------------
  119. ;
  120. ;    Descripción:
  121. ;
  122. ;    Esta función libera memoria XMS.
  123. ;
  124. ; Parámetros:
  125. ;
  126. ;        int h: gestor de memoria XMS
  127. ;
  128. ;    Retorno:
  129. ;
  130. ;        - 1 si libera.
  131. ;        - 0 si no.
  132. ;
  133. ;---- CODIGO: ------------------------------------------------------------------
  134.  
  135.         PUBLIC _XMSmemLiberar
  136. _XMSmemLiberar    PROC FAR
  137.         PUSH BP
  138.         MOV BP,SP
  139.  
  140.         MOV DX,[BP+_AOFF+0]
  141.         MOV AH,10
  142.         CALL CS:[CONTROL]
  143.  
  144.         SEGDATOS
  145.         POP BP
  146.         RET
  147. _XMSmemLiberar    ENDP
  148.  
  149. ;---- FIN FUNCION --------------------------------------------------------------
  150.  
  151. ;---- FUNCION: extern int XMSmemReservar(int n) --------------------------------
  152. ;
  153. ;    Descripción:
  154. ;
  155. ;   Esta función reserva memoria XMS (en Kbytes)
  156. ;
  157. ; Parámetros:
  158. ;
  159. ;        int n: número de Kbytes a reservar
  160. ;
  161. ;    Retorno:
  162. ;
  163. ;        - Gestor de memoria XMS
  164. ;        - -1 si hubo error
  165. ;
  166. ;---- CODIGO: ------------------------------------------------------------------
  167.  
  168.         PUBLIC _XMSmemReservar
  169. _XMSmemReservar    PROC FAR
  170.         PUSH BP
  171.         MOV BP,SP
  172.  
  173.         MOV DX,[BP+_AOFF+0]
  174.         MOV AH,9
  175.         CALL CS:[CONTROL]
  176.  
  177.         OR AX,AX
  178.         JZ RES1
  179.  
  180.         MOV AX,DX
  181.         JMP RES2
  182.  
  183. RES1:        MOV AX,0FFFFH
  184.  
  185. RES2:        SEGDATOS
  186.         POP BP
  187.         RET
  188. _XMSmemReservar    ENDP
  189.  
  190. ;---- FIN FUNCION --------------------------------------------------------------
  191.  
  192. ;---- FUNCION: extern long PunteroALong(char *p) -------------------------------
  193. ;
  194. ;    Descripción:
  195. ;
  196. ;        Convierte puntero a long.
  197. ;
  198. ; Parámetros:
  199. ;
  200. ;     char *p: puntero a convertir
  201. ;
  202. ;    Retorno:
  203. ;
  204. ;        - puntero convertido a long
  205. ;
  206. ;---- CODIGO: ------------------------------------------------------------------
  207.  
  208.         PUBLIC _PunteroALong
  209. _PunteroALong    PROC FAR
  210.         PUSH BP
  211.         MOV BP,SP
  212.  
  213.         MOV AX,[BP+_AOFF+0]
  214.         MOV DX,[BP+_AOFF+2]
  215.  
  216.         SEGDATOS
  217.         POP BP
  218.         RET
  219. _PunteroALong    ENDP
  220.  
  221. ;---- FIN FUNCION --------------------------------------------------------------
  222.  
  223. ; Funcion de retorno -1 para funciones no implementadas
  224.  
  225. _DUMMY    PROC FAR
  226.     MOV AX,0FFFFH
  227.     RET
  228. _DUMMY    ENDP
  229.  
  230. ;---- FIN FUNCION --------------------------------------------------------------
  231.  
  232. ; variables
  233.  
  234. CONTROL LABEL DWORD
  235. _CONTOFF DW _DUMMY
  236. _CONTSEG DW XMEM_TEXT
  237.  
  238. XMEM_TEXT ENDS
  239.  
  240. ; segmentos
  241.  
  242. DGROUP    GROUP _DATA,_BSS
  243. _DATA    SEGMENT WORD PUBLIC 'DATA'
  244. _DATA    ENDS
  245.  
  246. _BSS    SEGMENT WORD PUBLIC 'BSS'
  247. _BSS    ENDS
  248.     END
  249.